Injection SQL

 

Alors tout d'abord qu'est ce que le SQL ?? Le SQL est un language devoué a la gestion de base de donnée. ==> traduction : Quand, par exemple, vous vous inscrivez sur un site, toute les info que vous avez entrer pour votre inscription (email, pseudo, mot de passe...etc.) Sont stoquée dans une DB (=> Data base => base de donnés), Et pour acceder a cette DB, modifier son contenu...etc. On utilise le SQL !

Alors, venons en a l'attaque... Mettons un site, dans lequel il y a un champ de recherche qui vas vous permettre de rechercher un membre... En fait, quand vous allez cliquer sur le bouton "rechercher", une requette vas etre envoyé sur la DB.
Requette :
SI dans la partie Membre de la DB il y a un membre qui a pour nom "contenu du champ de texte" alors on affiche le resultat !

Au lieu de dire "partie membre" je vais employer le therme de TABLE membre... Alors une table est donc une partie de la DB ! Une DB est en effet secionné en une ou plusieurs table dans lequel sont stoqué les information correspondantes !
Par exemple la table membre qui vas contenir votre pseudo et votre mot de passe
Ou la table NewLetter Qui contiendra votre e-mail !
En SQL la requette aurais resembler a ceci :

SELECT * FROM membres WHERE pseudo = 'ContenuDuCHampDeTextt';

En fait une injection vas viser a deformer cette requette ! Reprenons un exemple d'un site dans lequel deux champ de texte a renseigner, l'un un pseudo et l'autre un pass.
Si le pseudo existe dans la DB(plus precisement dans la table membre) ainsi que le pass, alors on peut continuer...
En SQL :

("SELECT * FROM membres WHERE utilisateur = '$contenuDuChampPseudo' AND motdepasse = '$ContenuDuChampMotDePasse'");

Maintenant, si je met dans le premier champ (le champ pour donner le pseudo) ceci :

' OR 1=1"); //

Notre requette vas resembler a ceci :

("SELECT * FROM membres WHERE utilisateur = '' OR 1=1"); //' AND motdepasse = '$ContenuDuChampMotDePasse'");

On a ici TOTALEMENT deformer la requette, en français ça donne ceci !

Si le pseudo(= Nom Dutilisateur) est egal a '' (et donc rien) OU que 1 est egal a 1 Alors je continue...
Sachant que tout ce qui suit "//" est considéré comme une note est donc n'est pas pris en compte !
On a fait ici une injection SQL !
Donc, en reflechissant, on peut avoir tout ce que l'on veut (mot de passe...etc.)
Encore un petit exemple :

login : '; exec master..xp_cmdshell 'net stop firewall'; --

cette requête ci-dessus aurait pour effet d'exécuter une commande shell "net stop firewall" qui stopperait l'exécution du service "firewall" !

A vous de reflechir maintenant !